package com.baofu.paycore.manager.storer;

import com.baofu.paycore.manager.model.PayBaseBO;

/**
 * 订单持久化服务
 *
 * <p/>
 *      1、新增订单
 *      2、加载并锁定订单
 *      3、加载订单
 *      4、更新订单
 *      5、幂等性校验
 * </p>
 * User: LZQ Date: 2016/04/20  Version: 1.0
 */
public interface OrderRepository<T extends PayBaseBO> {

    /**
     * 新增订单
     *
     * @param t    订单信息
     */
    void addOrder(T t);

    /**
     * 加载并锁定订单
     *
     * @param requestOrderNo   请求订单号
     * @param requestBizNo     请求流水号
     * @return                 支付信息
     */
    T lock(String requestOrderNo, String requestBizNo,String requestSystem);

    /**
     * 加载订单
     *
     * @param payNo             支付单号
     * @return                  订单
     */
    T load(String payNo);

    /**
     * 更新订单
     *
     * @param t    订单信息
     */
    void update(T t);

    /**
     * 幂等性校验
     *
     * @param requestBizNo      请求流水号
     * @param requestOrderNo    请求清单号
     * @return                  订单
     */
    T checkIdempotent(String requestBizNo,String requestOrderNo,String requestSystem);

    /**
     * 废弃订单
     *
     * @param t    订单信息
     */
    void destroy(T t);
}
